import { useUserStore } from '@/stores';
import { getCurrentLanguage, useT } from '@/utils/i18n';
import { http } from 'uview-plus';
const requestInterceptors = () => {
  /**
   * 请求拦截
   * @param {Object} http
   */
  http.interceptors.request.use(
    (config) => {
      // 可使用async await 做异步操作
      // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
      config.data = config.data || {};
      config.header = {
        ...config.header,
        'cb-lang': getCurrentLanguage(),
        'Content-Type': 'application/json' // 演示拦截器header加参
      };
      if (config?.formData) {
        // 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
        config.header = {
          ...config.header,
          'Content-Type': 'application/json' // 演示拦截器header加参
        };
      }
      const store = useUserStore();
      if (store.token) {
        config.header['Authori-zation'] = `Bearer ${store.token}`;
      }
      return config;
    },
    (
      config // 可使用async await 做异步操作
    ) => Promise.reject(config)
  );
};
const responseInterceptors = () => {
  /**
   * 响应拦截
   * @param {Object} http
   */
  http.interceptors.response.use(
    (response) => {
      /* 对响应成功做点什么 可使用async await 做异步操作*/
      const data = response.data;
      // console.log('http', data)
      // 自定义参数
      // console.log('---', response.config.url, response.config, response.data);
      if (data.status && data.status == 'success') {
        return data || {};
      }
      // 如果请求外链 直接返回结果
      if (response.config.custom.extLink === true) {
        return data;
      }
      if (data.status == 200) return data;
      else if ([110002, 110003, 110004].indexOf(data.status) !== -1) {
        const store = useUserStore();
        store.logout();
        uni.showToast({
          title: data.msg,
          icon: 'none'
        });
        return Promise.reject(data);
      } else return Promise.reject(data.msg || useT(`系统错误`));
    },
    (response) => {
      /*  对响应错误做点什么 （statusCode !== 200）*/
      console.log('请求失败===>', response);
      return Promise.reject(response);
    }
  );
};

export { requestInterceptors, responseInterceptors };
